#include <search.h> требуется только для объявления функции
char *bsearch(key,base,num,width,compare);
char *key; ключ поиска
char *base; указатель на поисковую базу данных
unsigned num,width; число и размер элементов
int (*compare)(); указатель на функцию сравнения
Описание.
Функция bsearch производит двоичный поиск в отсортированном массиве из num элементов, размер каждого элемента равен width байт. Base - указатель на начало массива, key - значение ключа поиска.
Аргумент compare является указателем на процедуру, поставляемую пользователем, которая сравнивает два элемента массива и возвращает значение, определяющее их отношение. В течении поиска функция bsearch может вызывать процедуру compare один или несколько раз, передавая в каждом вызове указатели на два элемента массива. Процедура должна сравнивать элементы, а затем возвращать одно из следующих значений.
ЗНАЧЕНИЕ СМЫСЛ ЗНАЧЕНИЯ меньше 0 element1 меньше, чем element2 0 element1 равен element2 больше 0 element1 больше, чем element2
Возвращаемое значение.
Функция bsearch возвращает указатель на первое вхождение ключа key в массив, на который указывает base.
Если key не найден, функция возвращает NULL.
Пример:
/* Функция bsearch производит двоичный поиск в отсортиро-
ванном массиве для элемента "key" и возвращает указатель на
структуру, в которой находится ключ key, или возвращает NULL, ес-
ли ключа нет. */
#include <search.h>
#include <string.h>
#include <stdio.h>
int compare();
/* должна быть объявлена как функция */
main (argc, argv)
int argc;
char **argv;
{
char **result;
char *key = "PATH";
/* следующий оператор находит аргумент, начинающийся с
"PATH", в предположении, что аргументы лексикографически отсорти-
рованы */
result = (char **)bsearch((char *)&key,(char *)argv, argc, sizeof(char *),compare);
if (result) printf ("%s found\n", *result);
else
printf("PATH not found!\n");
}
int compare (arg1, arg2)
char **arg1, **arg2;
{
return(strncmp(*arg1, *arg2, strlen(*arg1)));
}